package cn.edu.xjtu.work.addStrings;

/**
 * 415. 字符串相加
 * 
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。
 * 
 * 你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。
 */
public class Solution {

    public static void main(String[] args) {
        Solution solu = new Solution();
        System.out.println(solu.addStrings("11", "123"));
    }

    public String addStrings(String num1, String num2) {
        // num1里面保存的是较短的数字
        if (num1.length() > num2.length()) {
            String temp = num1;
            num1 = num2;
            num2 = temp;
        }
        int carry = 0;
        int len1 = num1.length() - 1;
        int len2 = num2.length() - 1;
        StringBuilder sb = new StringBuilder();
        while (len1 >= 0) {
            int a = num1.charAt(len1--) - '0' + num2.charAt(len2--) - '0' + carry;
            carry = a >= 10 ? 1 : 0;
            sb.append(a >= 10 ? a - 10 : a);
        }
        while (len2 >= 0) {
            int a = num2.charAt(len2--) - '0' + carry;
            carry = a >= 10 ? 1 : 0;
            sb.append(a >= 10 ? a - 10 : a);
        }
        if (carry == 1) {
            sb.append(1);
        }
        return sb.reverse().toString();
    }
}
